package dynamicdiscountsystem;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import javax.swing.JOptionPane;

/**
 *
 * @author atilla1991
 */
public class DatabaseConnection {

    Connection conn = null;

    //Verilənlər Bazasına qoşulmaq üçün istifadə olunan metod.
    public void ConnectionOpen() throws IOException {

        String userName = "";
        String password = "";
        String url = "";
        String configFile = "src\\dynamicdiscountsystem\\resources\\Config.properties";
        Properties config = new Properties();
        try {
            // Konfiqurasiya faylini yuklemek
            config.load(new FileReader(configFile));
            // Konkret elementi konfiqurasiya faylindan oxumaq
            userName = config.getProperty("userName");
            password = config.getProperty("password");
            url = config.getProperty("url");
        } catch (FileNotFoundException ex) {
            JOptionPane.showMessageDialog(null,
                    "Konfiqurasiya fayli yoxdur.\nXəta mesajı = " + ex.getMessage(),
                    "Xəta", JOptionPane.ERROR_MESSAGE);
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(null,
                    "Fayldan oxuma xetasi bas verdi.\nXəta mesajı = " + ex.getMessage(),
                    "Xəta", JOptionPane.ERROR_MESSAGE);
        }

        //MySQL drayveri yaddaşa yüklənir.
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = (Connection) DriverManager.getConnection(url, userName, password);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null,
                    "Verilənler Bazasına qoşulmada problem var.\nXəta mesajı = " + ex.getMessage(),
                    "Xəta", JOptionPane.ERROR_MESSAGE);
        }
    }

    //Göndərilən əmri icra edən metod
    //INSERT , UPDATE , DELETE - əmrləri (command) üçün istifadə edilir.
    public void Execute(String Command) throws IOException, SQLException {
        ConnectionOpen();
        PreparedStatement ps = null;
        try {
            ps = conn.prepareStatement(Command);
            ps.execute();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null,
                    "Baza ilə bağlı problem var! \nXəta mesajı = " + ex.getMessage(),
                    "XƏTA", JOptionPane.ERROR_MESSAGE);
        } finally {
            ps.close();
            ConnectionClose();
        }
    }

    //Göndərilən əmri icra edən metod.
    //SELECT - əmri (command) üçün istifadə edilir.
    //Metod geriyə ResultSet obyekti qaytarır.
    public ResultSet ExecuteQuery(String Command) throws IOException, SQLException {
        ConnectionOpen();
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(Command);
            rs = ps.executeQuery();
            return rs;
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null,
                    "Baza ilə bağlı problem var! \nXəta mesajı = " + ex.getMessage(),
                    "XƏTA", JOptionPane.ERROR_MESSAGE);

        }
        ps.close();
        rs.close();
        ConnectionClose();
        return null;
    }

    //Verilənlər Bazası ilə əlaqəni kəsmək ücün istifadə edilir.
    public void ConnectionClose() {
        try {
            conn.close();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null,
                    "Verilənlər bazasıyla əlaqəni bağlıya bilmədik.\nXəta mesajı = " + ex.getMessage(),
                    "Xəta", JOptionPane.ERROR_MESSAGE);
        }
    }
}
